package ar.com.sne.model.service.per;

import java.util.List;

import org.springframework.stereotype.Service;

import foundation.common.util.BusinessException;
import foundation.common.util.CommonGeneralUtil;
import foundation.common.util.FinderFilter;
import foundation.common.util.PagedFinder;
import ar.com.sne.model.bo.per.PerCliente;
import ar.com.sne.model.dao.factory.PerDAOFactory;
import ar.com.sne.util.SNeHibernateUtil;

@Service("perClienteService")
public class PerClienteServiceImpl implements PerClienteService{
	
	private PerDAOFactory perClienteDAO;
	
   	
	public void delete(PerCliente perCliente) {
		validacionDelete(perCliente);
		SNeHibernateUtil.currentSession().getTransaction().begin();
		perClienteDAO.getPerClienteDAO().delete(perCliente);
		SNeHibernateUtil.currentSession().getTransaction().commit();
	}


	public List<PerCliente> findAll() {
		return perClienteDAO.getPerClienteDAO().findAll();
	}		

	
	public PerCliente findById(Long id) {
		return (PerCliente) perClienteDAO.getPerClienteDAO().getById(id);
	}


	public void save(PerCliente perCliente) {
		if(perCliente.getId() == null) {
			validacionCreate(perCliente);
		} else {
			validacionUpdate(perCliente);
		}
		SNeHibernateUtil.currentSession().getTransaction().begin();
		perClienteDAO.getPerClienteDAO().save(perCliente);
		SNeHibernateUtil.currentSession().getTransaction().commit();
	}
	
	
	public List<PerCliente> find(FinderFilter filter) {
	
		return perClienteDAO.getPerClienteDAO().find(filter);
	}
	

	public PagedFinder findPaging(PagedFinder pf) {
		return perClienteDAO.getPerClienteDAO().findPaging(pf);
	}

	
	/**
	 * Validaciones de negocio pre-delete Si al realizar la validacion la misma
	 * no pasa, se lanza una BusinessException
	 * 
	 * @param perCliente
	 *            la instancia a validar antes de ser borrada
	 */
	private void validacionDelete(PerCliente perCliente) {
		BusinessException be = new BusinessException();
		
		CommonGeneralUtil.throwBussinesException(be);
	}
	
	/**
	 * Validaciones de negocio pre-update Si al realizar la validacion la misma
	 * no pasa, se lanza una BusinessException
	 * 
	 * @param perCliente
	 *            la instancia a validar antes de ser modificada
	 */
	private void validacionUpdate(PerCliente perCliente) {
		BusinessException be = new BusinessException();
		
		//valida que el codigo no sea duplicado
		FinderFilter filter = new FinderFilter();
//		filter.addFilter("codigo", perCliente.getCodigo());
//		filter.addFilter("idPerCliente", perCliente.getId());
//		List<PerCliente> perClienteList = perClienteDAO.find(filter);
//		if(perClienteList.size()>0) //exite un tipo de movimiento de cta cte de poliza con el codigo pasado como parametro
//			be.addExceptionKey("PerCliente.validacionCreate.codigoDuplicado");
		
		CommonGeneralUtil.throwBussinesException(be);		
		
	}

	/**
	 * Validaciones de negocio pre-create Si al realizar la validacion la misma
	 * no pasa, se lanza una BusinessException
	 * 
	 * @param perCliente
	 *            la instancia a validar antes de ser creada
	 */
	private void validacionCreate(PerCliente perCliente) {
		BusinessException be = new BusinessException();
		
		CommonGeneralUtil.throwBussinesException(be);
	}
	
	
}
